From f76ef8ce8faf00e1f79bfe3cfd8f4fb90a6ad007 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.18.3 on 2026-02-04 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 +- .../linux/ipu8/gcss/OV08X40_KAFE799.IPU8.bin | Bin 0 -> 296576 bytes config/linux/ipu8/gcss/OV13B10_09B13.IPU8.bin | Bin 0 -> 384448 bytes .../linux/ipu8/gcss/OV13B10_09B13_2M.IPU8.bin | Bin 0 -> 243840 bytes config/linux/ipu8/libcamhal_configs.json | 30 + config/linux/ipu8/ov08x40.aiqb | Bin 0 -> 686370 bytes 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/ov08x40-uf.json | 218 + 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 + 96 files changed, 165106 insertions(+), 739 deletions(-) create mode 100644 config/linux/ipu8/gcss/OV08X40_KAFE799.IPU8.bin 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/ov08x40.aiqb 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/ov08x40-uf.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 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 literal 219360 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 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/OV08X40_KAFE799.IPU8.bin b/config/linux/ipu8/gcss/OV08X40_KAFE799.IPU8.bin new file mode 100644 index 0000000000000000000000000000000000000000..e3cfe05a60dbd075e7a72086afe023180518a30d GIT binary patch literal 296576 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 V=&w27L~20_@#lhI6X<^Y{y&k+YA65z literal 0 HcmV?d00001 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..1ee1057a8f3eb0c8478915bab22bc7895c51699b GIT binary patch literal 384448 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 L7sCg`4E+BA64wPU literal 0 HcmV?d00001 diff --git a/config/linux/ipu8/gcss/OV13B10_09B13_2M.IPU8.bin b/config/linux/ipu8/gcss/OV13B10_09B13_2M.IPU8.bin new file mode 100644 index 0000000000000000000000000000000000000000..e6fbb577251786f1dfc9b995d2dcf18978f1f555 GIT binary patch literal 243840 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 z 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

H~ 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 literal 0 HcmV?d00001 diff --git a/config/linux/ipu8/ov13b10.aiqb b/config/linux/ipu8/ov13b10.aiqb new file mode 100644 index 0000000000000000000000000000000000000000..d6fc9d6ab75af2a1ad9cde10b7f0e83ff122f66b GIT binary patch literal 372285 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ΝMMhWhzVOMi@$G9yFX5wlA>!N{YWY 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
iP0E;x9@9!>=H!WKbM{F}z9Zln&-BUW#SD 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 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/ov08x40-uf.json b/config/linux/ipu8/sensors/ov08x40-uf.json new file mode 100644 index 0000000..c3696df --- /dev/null +++ b/config/linux/ipu8/sensors/ov08x40-uf.json @@ -0,0 +1,218 @@ +// +// Copyright (C) 2026 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": "ov08x40-uf", + "description": "ov08x40 as sensor.", + "MediaCtlConfig": [ + { + "id": 0 , + "configMode": "AUTO", + "output": [3856, 2176], + "format": "V4L2_PIX_FMT_SGRBG10", + "formats": [ + { + "name": "ov08x40 $I2CBUS", "pad": 0, "width": 3856, "height": 2176, + "format": "V4L2_MBUS_FMT_SGRBG10_1X10" + }, + { + "name": "Intel IPU7 CSI2 $CSI_PORT", "pad": 0, "width": 3856, "height": 2176, + "format": "V4L2_MBUS_FMT_SGRBG10_1X10" + } + ], + "link": [ + { + "srcName": "ov08x40 $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": "ov08x40 $I2CBUS", "videoNodeType": "VIDEO_PIXEL_ARRAY" + } + ] + } + ], + "StaticMetadata": { + "supportedStreamConfig": [ + { + "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, 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 + } + ], + "supportedFeatures": [ + "MANUAL_EXPOSURE", "MANUAL_WHITE_BALANCE", "IMAGE_ENHANCEMENT", + "NOISE_REDUCTION", "PER_FRAME_CONTROL", "SCENE_MODE" ], + "fpsRange": [ 15, 15, 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": [ "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": [0], + "control.maxRegions" : [ 1, 0, 0 ], + // 0: OFF, 1: SMPLE, 2: FULL + "statistics.info.availableFaceDetectModes" : [0], + // align with supportedAeExposureTimeRange + "sensor.info.exposureTimeRange": [ 100, 100000 ], + "sensor.info.activeArraySize": [ 0, 0, 3856, 2176 ], + "sensor.info.pixelArraySize": [3856, 2176], + // 0:RGGB, 1:GRBG, 2:GBRG, 3:BGGR, 4:RGB + "sensor.info.colorFilterArrangement": [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, 4, 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 ], + "sensor.opaqueRawSize": [3856, 2176, 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,720,0, + 33,640,480,0, + 33,640,360,0, + 35,1920,1080,0, + 35,1280,720,0, + 35,640,480,0, + 35,640,360,0, + 34,1920,1080,0, + 34,1280,720,0, + 34,640,480,0, + 34,640,360,0 + ], + // 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,720,33333333, + 33,640,480,33333333, + 33,640,360,33333333, + 35,1920,1080,33333333, + 35,1280,720,33333333, + 35,640,480,33333333, + 35,640,360,33333333, + 34,1920,1080,33333333, + 34,1280,720,33333333, + 34,640,480,33333333, + 34,640,360,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,720,33333333, + 33,640,480,33333333, + 33,640,360,33333333 + ], + // 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", "ov08x40"], ["STILL_CAPTURE", "VIDEO", "ov08x40"]], + // 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": [[3856, 2176]], + "supportedISysFormat": ["V4L2_PIX_FMT_SGRBG10"], + "enableAIQ": true, + "iSysRawFormat": "V4L2_PIX_FMT_SGRBG10", + "maxRawDataNum": 32, + "initialSkipFrame": 0, + "exposureLag": 2, + "gainLag": 2, + "digitalGainLag": 0, + "ltmGainLag": 1, + // There are 2 yuv color range mode, like full, reduced. + "yuvColorRangeMode": "full", + "pipeSwitchDelayFrame": 60, + "graphSettingsFile": "OV08X40_KAFE799.IPU8.bin", + "graphSettingsType": "dispersed", + "enablePSysProcessor": true, + "dvsType": "IMG_TRANS", + "testPatternMap": { "Off": 0, "ColorBars": 1 + }, + "enableAiqd": true, + "useCrlModule": false, + "pslOutputMapForRotation": [ + [[3856, 2176], [3856, 2176]], + [[1920, 1080], [1920, 1080]], + [[1280, 720], [1280, 720]], + [[640, 480], [1280, 960]], + [[640, 360], [1280, 960]] + ], + "maxRequestsInflight": 6, + "psysBundleWithAic": false, + "skipFrameV4L2Error": true, + "isISYSCompression": false, + "isPSACompression": false, + "usingMockPSys": 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..5ecd987 --- /dev/null +++ b/modules/ipu_desc/ipu8/ipu_manifest_db_ipu8_psys_cb_lbff_descriptors.h @@ -0,0 +1,242 @@ +/* + * 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 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..a02a37d --- /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) 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 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) {